var phoneVerifyCode = ""; // 手机验证码
var emailVerifyCode = ""; // 邮箱验证码

$(function () {
    // 选项卡面板切换
    $('.tab').pignoseTab({
        animation: true,
        children: '.tab'
    });

});

// 当表单提交时，调用所有的校验方法(手机号注册)
$("#registerFormByPhone").submit(function () {
    // 发送数据到服务器
    if (validate()) {
        //校验通过,发送ajax请求，提交表单的数据   username=zhangsan&password=123
        $.post("user/register", $(this).serialize(), function (data) {
            //处理服务器响应的数据  data  {flag:true,errorMsg:"注册失败"}
            if (data.flag) {
                $("#isLoginModal").modal("show");
                $("#now_login").click(function () {
                    //注册成功，跳转登录页面
                    location.href = "login.jsp";
                });
            } else {
                // 注册失败,给弹出提示信息
                showErrorDialog(data.errorMsg);
            }
        });
    }
    //如果这个方法没有返回值，或者返回为true，则表单提交，如果返回为false，则表单不提交
    return false;
});

// 当表单提交时，调用所有的校验方法(邮箱注册)
$("#registerFormByEmail").submit(function () {
    // 发送数据到服务器
    if (validate2()) {
        //校验通过,发送ajax请求，提交表单的数据   username=zhangsan&password=123
        $.post("user/register", $(this).serialize(), function (data) {
            //处理服务器响应的数据  data  {flag:true,errorMsg:"注册失败"}
            if (data.flag) {
                $("#isLoginModal").modal("show");
                $("#now_login").click(function () {
                    //注册成功，跳转登录页面
                    location.href = "login.jsp";
                });
            } else {
                // 注册失败,给弹出提示信息
                showErrorDialog(data.errorMsg);
            }
        });
    }
    //如果这个方法没有返回值，或者返回为true，则表单提交，如果返回为false，则表单不提交
    return false;
});

// 昵称输入框输入字符长度检查
function checkLen(name) {
    var maxLen = 25; // 昵称输入框最大输入字符长度
    var nickName = $("#" + name);
    var nickNameVal = nickName.val();

    if (nickNameVal.length > maxLen) {
        nickName.val(nickNameVal.substr(0, maxLen));
    }
}

// 密码输入框下面的提示显示和隐藏
function pwd_hint_slide(pwd_hint_tr, pwd_hint_span) {
    $("#" + pwd_hint_tr).height(10);
    $("#" + pwd_hint_tr).toggle("slow");
    $("#" + pwd_hint_span).toggle("slow");
}

// 手机号注册表单提交校验
function validate() {
    if (checkVerifyCode() & checkAgree('agree') & checkName('nickName')
        & checkPhone() & checkPassword('pwd') & checkRepassword('pwd', 'repwd')) {
        return true;
    }

    return false;
}

// 邮箱注册表单提交校验
function validate2() {
    if (checkVerifyCode2() & checkAgree('agree2') & checkName('nickName2')
        & checkEmail() & checkPassword('pwd2') & checkRepassword('pwd2', 'repwd2')) {
        return true;
    }

    return false;
}

// 昵称校验
function checkName(name) {
    var nickName = $("#" + name);
    // 获得昵称输入框的值
    var nickNameVal = nickName.val();
    var nickName_err = $("#" + name + "_err"); // 昵称错误提示span标签
    var nickName_img = $("#" + name + "_img"); // 提示图标img标签

    // 昵称检查
    if (nickNameVal == "") {
        nickName_err.width(230);
        nickName_img.attr("src", "images/errIcon.png");
        nickName_err.css("color", "red");
        nickName_err.html("昵称不能为空！");
        nickName.css("border", "1px solid red");

        return false;
    }

    nickName.css("border", "");
    nickName_err.html("");
    nickName_img.attr("src", "images/correctIcon.png");

    return true;
}

// 校验手机号
function checkPhone() {
    var phone = $("#phone");
    /* 获得手机号输入框的值*/
    var phoneVal = phone.val();
    var phone_err = $("#phone_err"); // 手机号错误提示span标签
    var phone_img = $("#phone_img"); // 提示图标img标签

    var regexp = /^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\d{8}$/;

    phone_err.width(230);
    /* 手机号非空检查*/
    if (phoneVal == "") {
        phone_img.prop("src", "images/errIcon.png");
        phone_err.css("color", "red");
        phone_err.html("手机号不能为空！");
        phone.css("border", "1px solid red");

        return false;
    } else if (!regexp.test(phoneVal)) { // 手机号合法性检查
        phone_img.prop("src", "images/errIcon.png");
        phone_err.css("color", "red");
        phone_err.html("请输入正确的手机号！");
        phone.css("border", "1px solid red");

        return false;
    }

    // 校验通过,发送ajax请求，校验手机号是否已被注册
    $.post("user/isPhoneAlreadyRegister", {phone : phoneVal}, function (data) {
        //处理服务器响应的数据
        if (data.flag) {
            phone_img.prop("src", "images/errIcon.png");
            phone.css("border", "1px solid red");
            phone_err.html(data.errorMsg);

            return false;
        }
    });

    phone.css("border", "");
    phone_err.html("");
    phone_img.attr("src", "images/correctIcon.png");

    return true;
}

// 校验密码
function checkPassword(password) {
    var pwd = $("#" + password);
    /* 获得密码输入框的值*/
    var pwdVal = pwd.val();
    var pwd_err = $("#" + password + "_err"); // 密码错误提示span标签
    var pwd_img = $("#" + password + "_img"); // 提示图标img标签

    pwd_err.width(230);

    /* 密码非空检查*/
    if (pwdVal == "") {
        pwd_img.prop("src", "images/errIcon.png");
        pwd_err.css("color", "red");
        pwd_err.html("密码不能为空！");
        pwd.css("border", "1px solid red");

        return false;
    } else if (pwdVal.length < 8 || pwdVal.length > 16) { // 密码合法性检查
        pwd_img.prop("src", "images/errIcon.png");
        pwd_err.css("color", "red");
        pwd_err.html("密码长度不合法！");
        pwd.css("border", "1px solid red");

        return false;
    } else if (/\s+/.test(pwdVal)) {
        pwd_img.prop("src", "images/errIcon.png");
        pwd_err.css("color", "red");
        pwd_err.html("密码不能包含空格！");
        pwd.css("border", "1px solid red");

        return false;
    }

    var count = 0; // 记录密码中包含字母、符号、数字中哪几种
    //密码中是否有数字,或者是字母,或者是特殊符号
    if (/\d/.test(pwdVal)) {
        count++;
    }
    //判断密码中有没有字母
    if (/[a-zA-Z]/.test(pwdVal)) {
        count++;
    }
    //判断密码中有没有特殊符号
    if (/[^0-9a-zA-Z]/.test(pwdVal)) {
        count++;
    }

    if (count < 2) {
        pwd_img.prop("src", "images/errIcon.png");
        pwd_err.css("color", "red");
        pwd_err.html("必须包含数字、字母、符号中至少两种！");
        pwd.css("border", "1px solid red");

        return false;
    }

    pwd.css("border", "");
    pwd_img.attr("src", "images/correctIcon.png");
    pwd_err.html("");

    return true;
}

// 校验确认密码
function checkRepassword(password, repassword) {
    var repwd = $("#" + repassword);
    /* 获得确认密码输入框的值*/
    var repwdVal = repwd.val();
    var repwd_err = $("#" + repassword + "_err"); // 确认密码错误提示span标签
    var repwd_img = $("#" + repassword + "_img"); // 提示图标img标签

    repwd_err.width(230);
    /* 确认密码非空检查*/
    if (repwdVal == "") {
        repwd_img.prop("src", "images/errIcon.png");
        repwd_err.css("color", "red");
        repwd_err.html("确认密码不能为空！");
        repwd.css("border", "1px solid red");

        return false;
    } else if ($("#" + password).val() != repwdVal) {
        repwd_img.prop("src", "images/errIcon.png");
        repwd_err.css("color", "red");
        repwd_err.html("两次输入的密码不相同！");
        repwd.css("border", "1px solid red");

        return false;
    }

    repwd.css("border", "");
    repwd_img.attr("src", "images/correctIcon.png");
    repwd_err.html("");

    return true;
}

// 获取验证码button
var countdownByPhone = 60; // 发送验证码倒计时（时间到了后可再次发送验证码）
var countdownByEmail = 60;

// 给手机发送验证码
function sendVerifyToPhone() {
    var obj = $("#send_verify_btn");

    if (checkPhone()) {
        obj.attr("class", "getVerify");
        // 获取验证码倒计时
        sendVerifyCountdown(obj, countdownByPhone);
        // 弹窗提示
        $('#phoneModal').modal('show');
        // 如果手机号合法，获得手机号
        var phoneVal = $("#phone").val();
        // 发送ajax请求，给手机发送验证码
        $.post("user/sendVerifyCodeToPhone", {phone: phoneVal}, function (data) {
            // 获得返回的随机验证码
            phoneVerifyCode = data;
        });
    }

}

// 给邮箱发送验证码
function sendVerifyToEmial() {
    var obj = $("#send_verify_btn2");

    if (checkEmail()) {
        obj.attr("class", "getVerify");
        // 获取验证码倒计时
        sendVerifyCountdown(obj, countdownByEmail);
        // 弹窗提示
        $('#emailModal').modal('show');
        // 如果邮箱合法，获得邮箱
        var emailVal = $("#email").val();
        // 发送ajax请求，给邮箱发送验证码
        $.post("user/sendVerifyCodeToEmail", {email: emailVal}, function (data) {
            // 获得返回的随机验证码
            emailVerifyCode = data;
        });
    }

}

// 获取验证码倒计时
function sendVerifyCountdown(obj, countdown) {
    if (countdown == 0) {
        obj.val("获取验证码");
        obj.attr('disabled', false);
        obj.attr("class", "getVerify");
        obj.css("cursor", "pointer");
        countdown = 60;

        return;
    } else {
        obj.attr('disabled', true);
        obj.val("重新发送(" + (--countdown) + "s)");
        obj.attr("class", "");
        obj.css("font-size", "13px");
        obj.css("padding-left", "5px");
        obj.css("cursor", "not-allowed");
    }

    setTimeout(function () {
        sendVerifyCountdown(obj, countdown);
    }, 1000);
}

// 验证验证码(手机号注册)
function checkVerifyCode() {
    var verify = $("#verify");
    var verifyCode = verify.val();
    var verify_img = $("#verify_img");
    var verify_err = $("#verify_err");

    verify_err.width(230);

    if(phoneVerifyCode == "") {
        showErrorDialog("请获取验证码！");

        return false;
    }
    // 验证码非空判断
    if (verifyCode == "") {
        verify_img.prop("src", "images/errIcon.png");
        verify_err.css("color", "red");
        verify_err.html("请填写验证码！");
        verify.css("border", "1px solid red");

        return false;
    }

    // 判断验证码是否正确
    if (verifyCode != phoneVerifyCode) {
        verify_img.prop("src", "images/errIcon.png");
        verify_err.css("color", "red");
        verify_err.html("验证码错误！");
        verify.css("border", "1px solid red");

        return false;
    }

    verify_err.html("");
    verify_img.prop("src", "");
    verify.css("border", "");

    return true;
}

// 验证验证码(邮箱注册)
function checkVerifyCode2() {
    var verify = $("#verify2");
    var verifyCode = verify.val();
    var verify_img = $("#verify2_img");
    var verify_err = $("#verify2_err");

    verify_err.width(230);

    if(emailVerifyCode == "") {
        showErrorDialog("请获取验证码！");

        return false;
    }
    // 验证码非空判断
    if (verifyCode == "") {
        verify_img.prop("src", "images/errIcon.png");
        verify_err.css("color", "red");
        verify_err.html("请填写验证码！");
        verify.css("border", "1px solid red");

        return false;
    }

    // 判断验证码是否正确
    if (verifyCode != emailVerifyCode) {
        verify_img.prop("src", "images/errIcon.png");
        verify_err.css("color", "red");
        verify_err.html("验证码错误！");
        verify.css("border", "1px solid red");

        return false;
    }

    verify_err.html("");
    verify_img.prop("src", "");
    verify.css("border", "");

    return true;
}

// 验证爱是否勾选旅游协议复选框
function checkAgree(agreement) {
    var agree = $("#" + agreement);
    var agree_img = $("#" + agreement + "_img");
    var agree_err = $("#" + agreement + "_err");

    agree_err.width(230);
    // 判断爱旅游协议复选框是否选中
    if (!agree.prop("checked")) {
        agree_img.prop("src", "images/errIcon.png");
        agree_err.css("color", "red");
        agree_err.html("请先同意爱旅游用户协议！");

        return false;
    }

    agree_err.html("");
    agree_img.prop("src", "");

    return true;
}

// 邮箱校验
function checkEmail() {
    var regexp = /^([a-zA-Z0-9_-]{1,16})@([a-zA-Z0-9]{1,9})(\.[a-zA-Z0-9]{1,9}){0,3}(\.(?:com|net|org|edu|gov|mil|cn|us)){1,4}$/; // 邮箱校验正则表达式

    var email = $("#email");
    var emailVal = email.val();
    var email_img = $("#email_img");
    var email_err = $("#email_err");

    email_err.width(230);
    // 邮箱非空判断
    if (emailVal == "") {
        email_img.prop("src", "images/errIcon.png");
        email_err.css("color", "red");
        email_err.html("邮箱不能为空！");
        email.css("border", "1px solid red");

        return false;
    } else if (!regexp.test(emailVal)) {
        email_img.prop("src", "images/errIcon.png");
        email_err.css("color", "red");
        email_err.html("请输入正确的邮箱！");
        email.css("border", "1px solid red");

        return false;
    }

    // 校验通过,发送ajax请求，校验手机号是否已被注册
    $.post("user/isEmailAlreadyRegister", {email : emailVal}, function (data) {
        //处理服务器响应的数据
        if (data.flag) {
            email_img.prop("src", "images/errIcon.png");
            email.css("border", "1px solid red");
            email_err.html(data.errorMsg);

            return false;
        }
    });

    email_img.prop("src", "images/correctIcon.png");
    email.css("border", "");
    email_err.html("");

    return true;
}